<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">

<head>
<link rev="MADE" href="mailto:vavivavi@yahoo.co.jp">
<link rel="INDEX" href="orverview.html">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" type="text/css" href="../../../../vavi.css">
<title>vavi.awt.rubberband.basic</title>
<!--
 * Copyright (c) 2001 by Naohide Sano, All rights reserved.
 *
 * Written by Naohide Sano
 *
 * @author	<a href="mailto:vavivavi@yahoo.co.jp">Naohide Sano</a> (nsano)
 *
 * @version	0.00	010829	nsano	initial version
-->
</head>

<body>

<p>
Basic コンテナエディタ関連のクラスを提供します．
</p>

<h2>目的</h2>

コンテナ内のコンポーネントを視覚的に操作する．操作の感覚は
Draw 系のアプリケーションに準ずる．

<h2>使用法</h2>

コンテナを指定して BasicContainerEditor を作るだけでとりあえずは OK．

<pre>
    ContainerEditor ce = new BasicContainerEditor(container);
</pre>

<p>
編集可能にすればコンテナ内のコンポーネントに対して編集操作が可能になる．
</p>

<pre>
    ce.setEditable(true);
</pre>

<p>
以下の操作が可能．
</p>

<ul>
<li>領域を選択して，その領域内のコンポーネントを選択状態にする(赤いラバーバンド)</li>
<li>非選択のコンポーネントをクリックしてそのコンポーネントを選択状態にする(青いラバーバンド)</li>
<li>シフト+クリックで複数のコンポーネントを選択状態にする(青いラバーバンド)</li>
<li>複数選択時，選択されたコンポーネントをクリックすればそのコンポーネントは非選択状態になる</li>
<li>選択されたコンポーネントをドラッグして移動する(青いラバーバンド)</li>
<li>選択されたコンポーネントをドラッグしてサイズを変更する(青いラバーバンド)</li>
</ul>

<p>
BasicContainerEditor からは，以下のイベントが発生するので
ユーザはそれを利用してください．
</p>

<table>
<tr>
<th>イベントタイプ</th>
<th>イベント発生条件</th>
<th>イベントの引数</th>
</tr>
<tr>
<td>EditorEvent("select")</td>
<td>コンテナ内のコンポーネントが選択されたとき</td>
<td>選択されたコンポーネントのベクタ</td>
</tr>
<tr>
<td>EditorEvent("location")</td>
<td>コンテナ内のコンポーネントの位置が変わったとき</td>
<td>変更されたコンポーネント</td>
</tr>
<tr>
<td>EditorEvent("bounds")</td>
<td>コンテナ内のコンポーネントのサイズが変わったとき</td>
<td>変更されたコンポーネント</td>
</tr>
</table>

<h2>制約</h2>

<ul>
<li>現在のところ対象のコンテナのレイアウトは null の場合しか想定していません．</li>
<li>編集対象のコンテナは親となるコンポーネントの存在が必須です．うーん．．．</li>
<li><del datetime="020613">コントローラにコンポーネントを使用しているため，内部処理でのコントローラの追加，削除時に ContainerEvent が発生してしまいます．ユーザはこれを無視するプログラムを追加する必要があります． @see ContainerEditor#processContainerEvent,JEditablePanel#processContainerEvent</del></li>
</ul>

<h2>これから実装すること</h2>

<ul>
 <li>RubberBandRenderer 機構の完成</li>
 <li>キーボードの操作</li>
 <li>操作法をアクションとして分離する?</li>
 <li><del datetime="020613">container が選ばれたとき glassPane 消去</del></li>
</ul>

</body>

</html>
